IOS Swift 3 네 가지 단일 모드 상세 설명 및 인 스 턴 스
흔히 볼 수 있 는 몇 가지 방법 이 있어 요.
첫 번 째 는 터 질 정도 로 간단 해 요.
final class Single: NSObject {
static let shared = Single()
private override init() {}
}
final 키워드 의 역할 은 이런 종류 나 방법 으로 계승 되 고 다시 쓰 기 를 원 하지 않 는 다 는 것 이다.두 번 째
public extension DispatchQueue {
private static var onceToken = [String]()
public class func once(_ token: String, _ block: () -> Void) {
objc_sync_enter(self)
defer {
objc_sync_exit(self)
}
if onceToken.contains(token) {
return
}
onceToken.append(token)
block()
}
}
final class Single2: NSObject {
static func shared() -> Single2 {
struct Singleton {
static var single: Single2?
}
DispatchQueue.once(NSUUID().uuidString) {
Singleton.single = shared()
}
return Singleton.single!
}
}
두 번 째 는 OC 스타일 의 단일 사례 이지 만 Swift 3 에서 원래 의 dispatch 를 폐기 하 였 습 니 다.once_t,그래서 먼저 DispatchQueue 에 extension 을 추가 하여 원래 의 dispatch 를 실현 해 야 합 니 다.once_t 효과제3 종
private let single = Single3()
final class Single3: NSObject {
static var shared: Single3 {
return single
}
}
Swift 3 에서 권한 제 어 를 강 화 했 기 때문에 private override init()를 다시 쓰 는 방법 이 잘못 되 었 을 수 있 기 때문에 Swift 3 에서 보안 을 알 수 없습니다.네 번 째
final class Single4: NSObject {
static var shared: Single4 {
struct Static {
static let instance: Single4 = Single4()
}
return Static.instance
}
private override init() {}
}
방법 내 에서 정적 변 수 를 정의 합 니 다.읽 어 주 셔 서 감사합니다. 여러분 에 게 도움 이 되 기 를 바 랍 니 다.본 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
View의 레이아웃 방법을 AutoLayout에서 따뜻한 손 계산으로 하면 성능이 9.26배로 된 이야기이 기사는 의 15 일째 기사입니다. 어제는 에서 이었습니다. 손 계산을 권하는 의도는 없고, 특수한 상황하에서 계측한 내용입니다 화면 높이의 10 배 정도의 contentView가있는 UIScrollView 레이아...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.